package com.byx.chatclient.contract.user;

import com.byx.chatclient.view.IBaseView;

/**
 * ForgetPwdTaskContract
 *
 * @author Superb
 * @date 2021/3/24 21:27
 */
public interface ForgetPwdTaskContract {
    /**
     * Model层
     */
    interface Model{
        /**
         * 发送验证码的回调接口
         */
        interface SimpleCallBack {
            /**
             * 格式符合
             */
            void onSuccess(String data);

            /**
             * 格式不符合
             * @param errMsg 错误信息
             */
            void onError(String errMsg);
        }

        /**
         * 获取验证码
         * @param number
         * @param callBack
         */
        void getVerificationCode(String number, ForgetPwdTaskContract.Model.SimpleCallBack callBack);

        /**
         * 忘记密码
         * @param number
         * @param verificationCode
         */
        void forgetPwd(String number,String newPassword,SimpleCallBack callBack);

        /**
         * 验证邮箱与验证码是否对应
         * @param email
         * @param code
         */
        void checkVerificationCode(String email,String code,SimpleCallBack callBack);
        /**
         * 回调接口
         * @param <T> 回调参数类型
         */
        interface ForgetPwdCallBack<T>{
            /**
             * 成功
             * @param data 返回的数据
             */
            void onSuccess(T data);

            /**
             * 失败
             * @param data 返回数据
             */
            void onFailure(T data);

            /**
             * 账号不存在
             */
            void onAccountNotExists();
        }
    }

    /**
     * view层
     */
    interface View extends IBaseView {
        /**
         * 获取登录账号
         * @return 账号
         */
        String getAccount();

        /**
         * 暂时保存email到view
         * @param email
         */
        void setEmail(String email);

        /**
         * 从view获取email
         * @return
         */
        String getEmail();

        /**
         * 获取验证码
         * @return 验证码
         */
        String getVerificationCode();

        /**
         * 获取密码
         * @return 密码
         */
        String getPassword();

        /**
         * 错误时view层显示错误信息
         * @param errorMsg
         * @param code
         */
        void onError(String errorMsg,int code);

        /**
         * 错误时view层显示错误信息
         * @param errorMsg
         */
        void onError(String errorMsg);

        /**
         * 成功时调用view层方法
         */
        void onSuccess();

        /**
         * 发送验证码成功
         */
        void onSendVerificationCodeSuccess();

        /**
         * 验证码检验成功
         */
        void onCheckVerificationCodeSuccess();
    }

    interface Presenter {
        /**
         * 获取验证码
         */
        void getVerificationCode();
        /**
         * 忘记密码
         */
        void forgetPwd();

        /**
         * 验证码校验
         */
        void checkVerificationCode();
    }
}
